package br.com.tcc.gp.dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.tcc.gp.Interfaces.InterfaceEndereco;
import br.com.tcc.gp.modelo.Endereco;
import br.com.tcc.gp.util.DBConnector;

public class EnderecoDAO implements InterfaceEndereco{
	
	private Connection conexao;
	private PreparedStatement preparedStatement;
	List<Endereco> lista;
	int linhas;
	
	public static final String TABELA = "endereco";
	public static final String ID = "codigo";
	public static final String ENDERECO = "endereco";
	public static final String CIDADE = "cidade";
	public static final String NOME = "nome";
	public static final String CEP = "cep";
	public static final String FONE1 = "fone1";
	public static final String FONE2 = "fone2";
	public static final String EMAIL = "email";	
	
	public static final String SEQUENCIA = "seq_endereco";
		
	public EnderecoDAO() {
		try {
			conexao = DBConnector.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Falhou conexao");
		}
		lista = new ArrayList<Endereco>();

	}	
	
	public int salvar(Endereco endereco) {		
		try {			
			String sql ="INSERT INTO endereco (CODIGO, ENDERECO, CIDADE, CEP, FONE1 ,FONE2, EMAIL)"
					+ " VALUES (seq_endereco.nextval, ?, ?, ?, ?, ?, ?)";
			
			preparedStatement = conexao.prepareStatement(sql);							
			preparedStatement.setString(1, endereco.getEndereco());
			preparedStatement.setString(2, endereco.getCidade());
			preparedStatement.setString(3, endereco.getCep());
			preparedStatement.setString(4, endereco.getFone1());
			preparedStatement.setString(5, endereco.getFone2());
			preparedStatement.setString(6, endereco.getEmail());				 
			linhas = preparedStatement.executeUpdate();
			conexao.commit();
			return linhas;			 
		} catch (SQLException sqlException) {
			sqlException.printStackTrace();
		}
		 return 0;	
	}
	
	public int alterar(Endereco end) {
		try {

			String sql = "UPDATE endereco SET  endereco = ?, cidade = ?, cep = ?,"
					+ " fone1 = ?, fone2 = ?, email = ?  WHERE codigo = ? or email = ?";
			preparedStatement = conexao.prepareStatement(sql);
			preparedStatement.setString(1, end.getEndereco());
			preparedStatement.setString(2, end.getCidade());
			preparedStatement.setString(3, end.getCep());
			preparedStatement.setString(4, end.getFone1());
			preparedStatement.setString(5, end.getFone2());
			preparedStatement.setString(6, end.getEmail());
			preparedStatement.setInt(7, end.getCodigo());
			preparedStatement.setString(8, end.getEmail());
			int linhas = preparedStatement.executeUpdate();
			conexao.commit();			
			return linhas;
		} catch (SQLException sqlException) {
			sqlException.printStackTrace();
		}
		return 0;
	}
	
	public List<Endereco> listar() {
		try{
		
		String sql = "SELECT "+ID+", "+ENDERECO+", "+CIDADE+", "+CEP+", "+FONE1+", "+FONE2+", "+EMAIL+" FROM endereco";	

			preparedStatement = conexao.prepareStatement(sql);
			ResultSet resultado = preparedStatement.executeQuery();

			lista = new ArrayList<Endereco>();

			while (resultado.next()) {
				Endereco endereco = new Endereco();
				endereco.setCodigo(resultado.getInt(ID));
				endereco.setEndereco(resultado.getString(ENDERECO));
				endereco.setCidade(resultado.getString(CIDADE));
				endereco.setCep(resultado.getString(CEP));
				endereco.setFone1(resultado.getString(FONE1));
				endereco.setFone2(resultado.getString(FONE2));
				endereco.setEmail(resultado.getString(EMAIL));
				lista.add(endereco);
			}

			return lista;
		} catch (SQLException sqlException) {
			sqlException.printStackTrace();
		}
		return null;
	}
	

	public Endereco pesquisar(String ruaOuEmail) {
		try{
		
		String sql = "SELECT "+ID+", "+ENDERECO+", "+CEP+", "+FONE1+", "+FONE2+", "+EMAIL+
				" FROM endereco e where e.endereco like ? or e.email  = ?";	

			preparedStatement = conexao.prepareStatement(sql);
			preparedStatement.setString(1, "%"+ruaOuEmail+"%");
			preparedStatement.setString(2, "%"+ruaOuEmail+"%");
			ResultSet resultado = preparedStatement.executeQuery();
			Endereco endereco = new Endereco();

			while (resultado.next()) {
				endereco.setCodigo(resultado.getInt(ID));
				System.out.println(endereco.getCodigo());
				endereco.setEndereco(resultado.getString(ENDERECO));
				endereco.setCep(resultado.getString(CEP));
				endereco.setFone1(resultado.getString(FONE1));
				endereco.setFone2(resultado.getString(FONE2));
				endereco.setEmail(resultado.getString(EMAIL));
			}
			return endereco;
		} catch (SQLException sqlException) {
			sqlException.printStackTrace();
		}
		return null;
	}
	
	public Endereco pesquisar(int codigo) {
		try {

			String sql = "SELECT " + ID + ", " + ENDERECO + ",  " + CEP + ", "
					+ FONE1 + ", " + FONE2 + ", " + EMAIL + " , " + CIDADE
					+ " FROM endereco where codigo = ?";

			preparedStatement = conexao.prepareStatement(sql);
			preparedStatement.setInt(1, codigo);
			ResultSet resultado = preparedStatement.executeQuery();
			Endereco endereco = new Endereco();

			while (resultado.next()) {
				endereco.setCodigo(resultado.getInt(ID));
				endereco.setEndereco(resultado.getString(ENDERECO));
				endereco.setCep(resultado.getString(CEP));
				endereco.setFone1(resultado.getString(FONE1));
				endereco.setFone2(resultado.getString(FONE2));
				endereco.setEmail(resultado.getString(EMAIL));
				endereco.setCidade(resultado.getString(CIDADE));
			}
			return endereco;
		} catch (SQLException sqlException) {
			sqlException.printStackTrace();
		}
		return null;
	}
	
	
	public int deletar(int codigo) {
		try {
			String sql = "DELETE FROM endereco WHERE codigo = ?";
			preparedStatement = conexao.prepareStatement(sql);
			preparedStatement.setInt(1, codigo);
			linhas = preparedStatement.executeUpdate();
			conexao.commit();
			return linhas;
		} catch (SQLException sqlException) {
			sqlException.printStackTrace();
		}
		return 0;
	}
}